home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / menu / kiwi / demoprg / ksreak.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-29  |  5.9 KB  |  292 lines

  1. #include<stdlib.h>
  2. #include<kiwi_inc.h>
  3. #include<kiwipro.h>
  4.  
  5.  
  6. MENU spiel_menu[3]={
  7. "Spiel Starten ",0,1,"",
  8. "Spiel Optionen",0,6,"",
  9. "Beenden       ",0,1,"",
  10. };
  11.  
  12.  
  13.  
  14.  
  15. /********  Globale Variable         */
  16.  
  17. int but_form=KIWI_MODE;        /* Form der Schalter        */
  18. int but_shad=SHADOW_ON;        /* Schalter mit Schatten    */
  19. int but_klick=KLICK_ON;        /* Schalter mit Klicken        */
  20. int freq_ein=100;        /* Einschaltfrequenz        */
  21. int ton_ein=2;                     /* Einschaltdauer        */
  22. int freq_aus=100;        /* Ausschaltfrequenz        */
  23. int ton_aus=2;            /* Einschaltdauer        */
  24.  
  25. int play_anzahl=10;        /* Anzahl Durchläufe        */
  26. int play_button;        /* Aktiver Schalter        */
  27. int error;            /* Abbruchbedingung        */
  28. int play_typ=3;    /* 6x5    */    /* Spielflächentyp        */
  29. int max_button;            /* Anzahl Schalter        */
  30.  
  31.  
  32. BUTTON *but[30];        /* Pointer auf die Schalter    */
  33. char *titel[30]={        /* Schlaterbeschriftungsfeld    */
  34. "Autton",
  35. "Button",
  36. "Cutton",
  37. "Dutton",
  38. "Eutton",
  39. "Futton",
  40. "Gutton",
  41. "Hutton",
  42. "Iutton",
  43. "Jutton",
  44. "Kutton",
  45. "Lutton",
  46. "Mutton",
  47. "Nutton",
  48. "Outton",
  49. "Putton",
  50. "Qutton",
  51. "Rutton",
  52. "Sutton",
  53. "Tutton",
  54. "Uutton",
  55. "Vutton",
  56. "Wutton",
  57. "Xutton",
  58. "Yutton",
  59. "Zutton",
  60. "Autton",
  61. "Button",
  62. "Cutton",
  63. "Dutton",};
  64.  
  65.  
  66. ZEIT start,ende,diff_time;    /* Definitionen der benötigten Zeitvariablen    */
  67. ULONG min,max,norm;        /* Millisekundenzähler                */
  68.  
  69.  
  70. int  dateimenu(void);
  71. int  spielmenu(void);
  72. int  festmenu(void);
  73. int  spieloptionen(void);
  74. int  play(void);
  75. int  action(void);
  76. int  set_button(void);
  77. int  init_tools(void);
  78. int  reset_tools(void);
  79. void  check_if_get_help(void);
  80.  
  81.  
  82. /* Macro to get a random integer within a specified range */
  83. #define getrandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
  84.  
  85.  
  86.  
  87. /************************************************************************/
  88. int reaktionstest()
  89. {
  90. int wahl=0,ende=0;
  91. WINDOW win;
  92.  
  93. win=load_window("SPIELINT .WND");
  94. wait_input();
  95. close_window(win);
  96.  
  97. ende=win=0;
  98. do
  99. {
  100.     wahl=choose_menu(spiel_menu,3,45,10,&win);
  101.     switch(wahl){
  102.         case 0:     play();                    /* Starte Spiel        */
  103.             break;
  104.  
  105.         case 1:     spieloptionen();            /* Spieloptionen    */
  106.             break;
  107.  
  108.         case 2:     ende=1;
  109.  
  110.     }    
  111.  
  112. }while(!ende);
  113.  
  114. close_window(win);
  115.  
  116. return(0);
  117. }
  118.  
  119.  
  120.  
  121. int spieloptionen()
  122. {
  123. static WINDOW win=0;
  124.  
  125. win=load_window("SPIELOPT.WND");
  126. scanf_mask(win,0,"x",&play_typ,
  127.             &play_anzahl
  128.             /* Button Ok */);
  129.  
  130. close_window(win);
  131. return(0);
  132. }
  133.  
  134.  
  135.  
  136.  
  137. /************************************************************************/
  138. int play()
  139. {
  140. int i,x,y,dx,dy,max_x,xa,ya;
  141. WINDOW win,win1;
  142. ULONG diff;
  143.  
  144. /* Setze die Spielfläche nach gewählten Modus            */
  145. if(play_typ==0)        /*    3x3    */    
  146. {
  147.     xa=12;
  148.     ya=3;    
  149.     dx=20;
  150.     dy=6;
  151.     max_x=70;
  152.     max_button=9;
  153. }
  154. else if(play_typ==1)    /*    4x4    */
  155. {
  156.     xa=8;
  157.     ya=2;    
  158.     dx=17;
  159.     dy=5;
  160.     max_x=76;
  161.     max_button=16;
  162. }
  163. else if(play_typ==2)    /*    5x5    */
  164. {
  165.     xa=4;
  166.     ya=1;    
  167.     dx=14;
  168.     dy=4;
  169.     max_x=74;
  170.     max_button=25;
  171. }
  172. else if(play_typ==3)    /*    5x5    */
  173. {
  174.     xa=2;
  175.     ya=1;    
  176.     dx=12;
  177.     dy=4;
  178.     max_x=74;
  179.     max_button=30;
  180. }
  181. /* Seed the random number generator with current time. */
  182. srand( (unsigned)time( NULL ) );
  183.  
  184. win=open_window("Spielfläche",2,2,78,24,DOPPELT);    /* Spielfläche    */
  185. y=ya;
  186. x=xa;
  187. for(i=0;i<max_button;i++)                /* Erstelle Schalter    */
  188. {
  189.     but[i]=create_button(win,titel[i],0,6,x,y);
  190.     x+=dx;
  191.  
  192.     if(x>=max_x)
  193.     {
  194.         y+=dy;
  195.         x=xa;
  196.     }
  197. }
  198.  
  199. win1=open_window("",AM,AM,45,3,DOPPELT);        /* Letzte Warnung    */
  200. display_string("Wenn fertig, beliebige Taste zum Starten",win1,AM,2);
  201. wait_input();
  202. close_window(win1);
  203.  
  204. max=norm=0l;                        /* Setze die Zeitdaten    */
  205. min=1000000l;
  206. error=0;
  207. for(i=0;i<play_anzahl&& error!=(-1);i++)
  208. {
  209.     set_button();                    /* Aktivier Schalter    */
  210.     activ_button(but[play_button]);            /* Setze den auf Aktiv    */
  211.     pieps();                    /* Letzte Meldung    */
  212.     get_system_time(&start);            /* Hole Startzeit    */
  213.     action();                    /* warte auf Aktion des Spielers    */
  214.     get_system_time(&ende);                /* Hole Endzeit        */
  215.     passiv_button(but[play_button]);        /* Schalter auf aus    */
  216.     if(error==1)error=0;                /* Weiterspielen ? ja    */
  217.  
  218.     diff=sub_time(&diff_time,&start,&ende);        /* Berechne Reaktionszeit    */
  219.     if(diff<min)min=diff;                /* Kleiner als bisher    */
  220.     if(diff>max)max=diff;                /* Größer als bisher    */
  221.     norm+=diff;
  222. }
  223. win1=open_window("Ergebnis",AM,AM,50,10,DOPPELT);    /* Zeige Ergebnis    */
  224. wlocate(win1,2,2);
  225. printw(win1,"Anzahl Durchläufe                   = %d \n",play_anzahl);
  226. printw(win1,"Minimale Reaktionszeit         (ms) = %ld\n",min);
  227. printw(win1,"Maximale Reaktionszeit         (ms) = %ld\n",max);
  228. printw(win1,"Durchschnittlich Reaktionszeit (ms) = %ld\n",norm/i);
  229. wait_input();
  230. close_window(win1);
  231.  
  232. for(i=0;i<max_button;i++)                /* Zerstöre Schalter    */
  233.     destroy_button(but[i]);
  234.  
  235. close_window(win);                    /* Fenster weg        */
  236.  
  237. return(0);
  238. }
  239.  
  240.  
  241.  
  242.  
  243. /************************************************************************/
  244. int action()
  245. {
  246. int ts,ms;
  247. UINT mx,my;
  248.  
  249.  
  250. do
  251. {
  252.     ts=input();                /* Tastatur        */
  253.     ms=mouse(&mx,&my);            /* Maus            */
  254.  
  255.     if(ts==27)error=(-1);            /* Abbruch        */
  256.     
  257.     if(get_input_status() & 8)        /* Alt Taste und     */
  258.     {
  259.         if(ts-65==play_button)error=1;  /* Treffer        */
  260.     }
  261.     if(ms==1 && is_mouse_inside_button(but[play_button]))error=1;
  262.                         /* Maustreffer        */
  263. }while(!error);                    /* Bis Treffer oder Lustlos    */
  264.  
  265. if(error==1)                    /* Getroffen        */
  266. {
  267.     press_button(but[play_button]);        /* Schalte Schalter ein    */
  268.     clear_input_qeue();            /* Warte bis alle Tassten los    */
  269.     release_button(but[play_button]);    /* Schalte Schalter aus    */
  270. }            
  271. return(0);
  272. }
  273.  
  274.  
  275.  
  276. /************************************************************************/
  277. int set_button()
  278. {
  279. int i,anzahl;
  280.  
  281.  
  282. anzahl=getrandom(40,140);            /* Wie oft Durchlaufen    */
  283.  
  284. for(i=0;i<anzahl;i++)                /* So oft Schalte     */
  285. {
  286.     play_button=getrandom(0,max_button-1);    /* Welcher Schalter    */
  287.     activ_button(but[play_button]);        /* Aktivieren        */
  288.     passiv_button(but[play_button]);    /* Passivieren        */
  289. }
  290. return(0);
  291. }
  292.